#include <iostream>
#include <memory>

using std::cout;
using std::endl;
using std::auto_ptr;

void test()
{
    //pInt称为裸指针(原生的指针)
    int *pInt = new int(10);
    auto_ptr<int> ap(pInt);//智能指针
    cout << "*ap = " << *ap << endl;
    cout << "*pInt = " << *pInt << endl;

    cout << endl;
    //表面上执行的是拷贝操作，但是底层已经将右操作数ap所托管
    //的堆空间的控制权已经交给了左操作数ap2，并且ap底层的数据
    //成员已经被置位空了,该拷贝操作存在隐患,所以该拷贝操作
    //是存在缺陷的
    auto_ptr<int> ap2(ap);
    cout << "*ap2 = " << *ap2 << endl;
    /* cout << "*ap = " << *ap << endl;//error */
}

int main(int argc, char **argv)
{
    test();
    return 0;
}

